Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Representational State Transfer</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Representational_State_Transfer"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Representational_State_Transfer rootpage-Representational_State_Transfer skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Representational State Transfer</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p><b>Representational State Transfer</b> (abgekürzt <b>REST</b>) ist ein <a href="Paradigma" title="Paradigma">Paradigma</a> für die <a href="Softwarearchitektur" title="Softwarearchitektur">Softwarearchitektur</a> von <a href="Verteiltes_System" title="Verteiltes System">verteilten Systemen</a>, insbesondere für <a href="Webservice" title="Webservice">Webservices</a>. REST ist eine Abstraktion der Struktur und des Verhaltens des <a href="World_Wide_Web" title="World Wide Web">World Wide Web</a>. REST hat das Ziel, einen Architekturstil zu schaffen, der den Anforderungen des modernen Web besser genügt. Dabei unterscheidet sich REST vor allem in der Forderung nach einer einheitlichen Schnittstelle (siehe Abschnitt <a href="#Prinzipien">Prinzipien</a>) von anderen Architekturstilen.
</p><p>Der Zweck von REST liegt schwerpunktmäßig auf der <a href="Maschine-zu-Maschine-Kommunikation" class="mw-redirect" title="Maschine-zu-Maschine-Kommunikation">Maschine-zu-Maschine-Kommunikation</a>. REST stellt eine einfache Alternative zu ähnlichen Verfahren wie <a href="SOAP" title="SOAP">SOAP</a> und <a href="Web_Services_Description_Language" title="Web Services Description Language">WSDL</a> und dem verwandten Verfahren <a href="Remote_Procedure_Call" title="Remote Procedure Call">RPC</a> dar. Anders als bei vielen verwandten <a href="Architektur_(Informatik)" title="Architektur (Informatik)">Architekturen</a> kodiert REST keine Methodeninformation in den <a href="Uniform_Resource_Identifier" title="Uniform Resource Identifier">URI</a>, da ein URI nur den Ort (URL) oder Namen (URN) einer Ressource angibt, nicht aber die Funktionalität, die der Web-Dienst zu der Ressource anbietet. Der Vorteil von REST liegt darin, dass im WWW bereits ein Großteil der für REST nötigen Infrastruktur (z.&nbsp;B. Web- und Application-Server, <a href="Hypertext_Transfer_Protocol" title="Hypertext Transfer Protocol">HTTP</a>-fähige Clients, <a href="Hypertext_Markup_Language" title="Hypertext Markup Language">HTML</a>- und <a href="Extensible_Markup_Language" title="Extensible Markup Language">XML</a>-Parser, Sicherheitsmechanismen) vorhanden ist und viele Web-Dienste per se REST-konform sind. Eine Ressource kann dabei über verschiedene <a href="Internet_Media_Type" title="Internet Media Type">Medientypen</a> dargestellt werden, auch <i>Repräsentation der Ressource</i> genannt.
</p><p>So ist ein <a href="Online-Dienst" class="mw-redirect" title="Online-Dienst">Online-Dienst</a>, der lediglich unveränderte Seiteninhalte nach dem Internetstandard HTTP anbietet, bereits REST-konform. Dynamisch erzeugte Seiten folgen diesem Paradigma jedoch oft nicht. So bieten beispielsweise Nachrichtenseiten sich ständig ändernde Informationen mit sowohl unterschiedlichem Format als auch Inhalt an, die nur schwer automatisch verarbeitet werden können. Bliebe das Format unverändert, so wäre eine wichtige REST-Eigenschaft erfüllt. So wäre eine Webseite, auf der ständig die aktuelle Uhrzeit in immer demselben Format abrufbar ist, REST-konform.
</p><p>Die Bezeichnung „Representational State Transfer“ soll den Übergang vom aktuellen Zustand zum nächsten Zustand (state) einer Applikation verbildlichen. Dieser Zustandsübergang erfolgt durch den Transfer der Daten, die den nächsten Zustand repräsentieren.<sup id="cite_ref-fielding_experiences_1-0" class="reference"><a href="#cite_note-fielding_experiences-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>

<div class="mw-heading mw-heading2"><h2 id="Geschichte">Geschichte</h2></div>
<p>Das REST-Paradigma entwickelte sich aus dem 1994 von <a href="Roy_Fielding" title="Roy Fielding">Roy Fielding</a> entworfenen HTTP Object Model. Fielding entwickelte seine Idee von einem einheitlichen Konzept über die Jahre weiter, bis er 2000 den REST-Architekturstil im Rahmen seiner <a href="Dissertation" title="Dissertation">Dissertation</a> veröffentlichte.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> Das <a href="Programmierparadigma" title="Programmierparadigma">Programmierparadigma</a> der „RESTful Application“ wurde allerdings häufig falsch umgesetzt und findet erst seit 2014 Anklang in der Welt des World Wide Web. In seiner Arbeit geht Fielding dabei auf die verschiedenen Anforderungen ein, die für die Webarchitektur wichtig sind.
</p>
<div class="mw-heading mw-heading2"><h2 id="Prinzipien">Prinzipien</h2></div>
<p>Der Architekturstil verweist auf sechs Eigenschaften, die ein Dienst haben muss. Dabei ist nicht festgelegt, wie diese Prinzipien implementiert werden müssen. Fielding beschreibt für jedes Architekturprinzip dessen Vor- und Nachteile.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Client-Server">Client-Server</h3></div>
<p>Es gilt generell die Anforderung, dass alle Eigenschaften der <a href="Client-Server-Architektur" class="mw-redirect" title="Client-Server-Architektur">Client-Server-Architektur</a> gelten. Dabei stellt der Server einen Dienst bereit, der bei Bedarf vom Client angefragt werden kann. Der Hauptvorteil dieser Anforderung ist die einfache <a href="Skalierbarkeit" title="Skalierbarkeit">Skalierbarkeit</a> der Server, da diese unabhängig vom Client agieren. Dies ermöglicht des Weiteren eine unterschiedlich schnelle Entwicklung der beiden Komponenten.
</p>
<div class="mw-heading mw-heading3"><h3 id="Zustandslosigkeit">Zustandslosigkeit</h3></div>
<p>Jede REST-Nachricht enthält alle Informationen, die für den Server bzw. Client notwendig sind, um die Nachricht zu verstehen. Weder der Server noch die Anwendung soll Zustandsinformationen zwischen zwei Nachrichten speichern. Man spricht daher von einem <a href="Zustandslosigkeit" title="Zustandslosigkeit">zustandslosen</a> (englisch: <i>stateless</i>) Protokoll. Jede Anfrage eines Clients an den Server ist insofern in sich geschlossen, als dass sie sämtliche Informationen über den Anwendungszustand beinhaltet, die vom Server für die Verarbeitung der Anfrage benötigt werden.
</p><p>Zustandslosigkeit in der hier beschriebenen Form begünstigt die <a href="Skalierbarkeit" title="Skalierbarkeit">Skalierbarkeit</a> eines Webservices. Beispielsweise können eingehende Anfragen im Zuge der <a href="Lastverteilung_(Informatik)" title="Lastverteilung (Informatik)">Lastverteilung</a> unkompliziert auf beliebige Maschinen verteilt werden: Da jede Anfrage in sich geschlossen ist und Anwendungsinformationen somit ausschließlich auf der Seite des Clients vorgehalten werden, ist auf der Seite des Servers keine Sitzungsverwaltung erforderlich. In der Praxis nutzen deswegen viele HTTP-basierte Anwendungen <a href="HTTP-Cookie" title="HTTP-Cookie">Cookies</a> und andere Techniken, um Zustandsinformationen auf der Client-Seite zu behalten. Weiterhin begünstigt wird die Ausfallsicherheit, weil die Zustandslosigkeit fordert, dass transaktionale Datenübertragung in einem einzigen Seitenaufruf erfolgt. Die Zustandslosigkeit bringt dabei aber den Nachteil mit, dass sich die Netzwerkperformance verschlechtert. Da bei jeder Abfrage alle Informationen zum Verstehen mitgeschickt werden müssen, sind aufwendigere Abfragen nötig, als wenn sich der Server die Interaktionen merken würde.
</p>
<div class="mw-heading mw-heading3"><h3 id="Caching">Caching</h3></div>
<p><a href="HTTP_Caching" title="HTTP Caching">HTTP Caching</a> soll genutzt werden, wobei gilt: Eine Anfrage, die nicht gestellt werden muss, ist die schnellste Anfrage. Fielding führt dabei den Nachteil auf, dass der Client auf veraltete Cache-Daten zurückgreifen könnte, statt die neue Ressource abzufragen.
</p>
<div class="mw-heading mw-heading3"><h3 id="Einheitliche_Schnittstelle">Einheitliche Schnittstelle</h3></div>
<p>Dies ist das Hauptunterscheidungsmerkmal von allen weiteren Architekturstilen. Dabei besteht diese aus vier weiteren Eigenschaften. Ziel ist die Einheitlichkeit der Schnittstelle und somit ihre einfache Nutzung.
</p>
<div class="mw-heading mw-heading4"><h4 id="Adressierbarkeit_von_Ressourcen">Adressierbarkeit von Ressourcen</h4></div>
<p>Jede Information, die über einen URI kenntlich gemacht wurde, wird als Ressource gekennzeichnet. Jeder REST-konforme Dienst hat eine eindeutige Adresse, den <a href="Uniform_Resource_Locator" title="Uniform Resource Locator">Uniform Resource Locator</a> (URL). Diese „Straße und Hausnummer im Netz“ standardisiert den Zugriffsweg zum Angebot eines Webservices für eine Vielzahl von Anwendungen (Clients). Eine konsistente Adressierbarkeit erleichtert es außerdem, einen Webservice als Teil eines <a href="Mashup_(Internet)" title="Mashup (Internet)">Mashups</a> weiterzuverwenden.
</p>
<div class="mw-heading mw-heading4"><h4 id="Repräsentationen_zur_Veränderung_von_Ressourcen"><span id="Repr.C3.A4sentationen_zur_Ver.C3.A4nderung_von_Ressourcen"></span>Repräsentationen zur Veränderung von Ressourcen</h4></div>
<p>Die unter einer Adresse zugänglichen Dienste können unterschiedliche Darstellungsformen (Repräsentationen) haben. Ein REST-konformer Server kann je nachdem, was die Anwendung anfordert, verschiedene Repräsentationen einer Ressource ausliefern, z.&nbsp;B. in verschiedenen Sprachen oder Formaten (<a href="Hypertext_Markup_Language" title="Hypertext Markup Language">HTML</a>, <a href="JavaScript_Object_Notation" class="mw-redirect" title="JavaScript Object Notation">JSON</a> oder <a href="Extensible_Markup_Language" title="Extensible Markup Language">XML</a>) oder auch die Beschreibung oder Dokumentation des Dienstes. Diese Repräsentation enthält alle nötigen Informationen zur Veränderung der Ressource und muss nicht der intern vom Server verwendeten Repräsentation entsprechen (z.&nbsp;B. die Repräsentation zwischen Client und Server wird als JSON ausgetauscht, intern speichert der Server die Informationen aber in verschiedenen Spalten einer <a href="Relationale_Datenbank" title="Relationale Datenbank">relationalen Datenbank</a> ab).
Die Veränderung einer Ressource (also deren aktuellen Status) soll nur über eine Repräsentation erfolgen.
</p>
<div class="mw-heading mw-heading4"><h4 id="Selbstbeschreibende_Nachrichten">Selbstbeschreibende Nachrichten</h4></div>
<p>REST-Nachrichten sollen selbstbeschreibend sein. Dazu zählt u.&nbsp;a. die Verwendung von Standardmethoden. Über diese Standardmethoden lassen sich Ressourcen manipulieren. Als Beispiel seien an dieser Stelle die HTTP-Verben genannt; Details siehe unten.
</p>
<div class="mw-heading mw-heading4"><h4 id="„Hypermedia_as_the_Engine_of_Application_State“_(HATEOAS)"><span id=".E2.80.9EHypermedia_as_the_Engine_of_Application_State.E2.80.9C_.28HATEOAS.29"></span>„Hypermedia as the Engine of Application State“ (HATEOAS)</h4></div>
<p>Dies ist laut Fielding die wichtigste Eigenschaft; siehe <a href="#HATEOAS">unten</a>.
</p>
<div class="mw-heading mw-heading3"><h3 id="Mehrschichtige_Systeme">Mehrschichtige Systeme</h3></div>
<p>Die Systeme sollen mehrschichtig aufgebaut sein. Dadurch reicht es, dem Anwender lediglich eine Schnittstelle anzubieten. Dahinterliegende Ebenen können verborgen bleiben und somit die Architektur insgesamt vereinfacht werden. Vorteile dabei sind die bessere Skalierbarkeit der Server sowie eine mögliche Abkapselung durch Firewalls. Durch Cache-Speicher an den Grenzen (z.&nbsp;B. vom Server zum Web) kann die Effizienz der Anfragen erhöht werden; siehe Caching.
</p>
<div class="mw-heading mw-heading3"><h3 id="Code_on_Demand_(optional)"><span id="Code_on_Demand_.28optional.29"></span>Code on Demand (optional)</h3></div>
<p>Diese Forderung von Fielding ist optional. Unter Code on Demand ist zu verstehen, dass erst im Bedarfsfall an den Client Code zur lokalen Ausführung übertragen werden kann.<br>
Ein Beispiel hierfür wäre die Übertragung von JavaScript-Code bei einer HTML-Repräsentation.
</p>
<div class="mw-heading mw-heading2"><h2 id="Umsetzung">Umsetzung</h2></div>
<p>Für die Umsetzung des REST-Paradigmas wird ein zustandsloses Client-Server-Protokoll verwendet. Als Anwendungsschicht-Protokolle werden hauptsächlich <a href="Hypertext_Transfer_Protocol" title="Hypertext Transfer Protocol">HTTP</a> und <a href="Hypertext_Transfer_Protocol_Secure" title="Hypertext Transfer Protocol Secure">HTTPS</a> eingesetzt. Das liegt unter anderem daran, dass sich diese im WWW etabliert haben, über einen vergleichsweise einfachen Aufbau verfügen und mit so gut wie jeder <a href="Firewall" title="Firewall">Firewall</a> kompatibel sind. REST vereinheitlicht die Schnittstelle zwischen Systemen auf eine überschaubare und bezüglich des zu erwartenden Verhaltens standardisierte Menge von Aktionen. Welche Aktionen dies sind, ist in REST nicht festgelegt, aber alle Aktionen sind allgemein definiert, in der Regel durch die verwendeten Protokolle der Anwendungsschicht.
</p><p>Während REST als Abstraktion des WWW keine spezielle <a href="Implementierung" title="Implementierung">Implementierung</a> und kein spezielles Protokoll fordert, ist doch zu beobachten, dass fast ausschließlich HTTP verwendet wird, wodurch auch die Menge der Aktionen festgelegt ist.
</p><p>Wird über HTTP zugegriffen, so gibt die verwendete HTTP-Methode, darunter <code>GET</code>, <code>POST</code>, <code>PUT</code> und <code>DELETE</code>, an, welche Operation des Dienstes gewünscht ist.
HTTP schreibt vor, dass <code>GET</code> „sicher“ (<span style="font-style:normal;font-weight:normal"><a href="Englische_Sprache" title="Englische Sprache">englisch</a></span> <span lang="en-Latn" style="font-style:italic">safe</span>) sein muss, was bedeutet, dass diese Methode nur Informationen beschafft und keine sonstigen Effekte verursacht. Die Methoden <code>GET</code>, <code>HEAD</code>, <code>PUT</code> und <code>DELETE</code> müssen laut HTTP-Spezifikation <a href="Idempotenz" title="Idempotenz">idempotent</a> sein, was in diesem Zusammenhang bedeutet, dass das mehrfache Absenden der gleichen Anforderung sich nicht anders auswirkt als ein einzelner Aufruf.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>
</p><p>REST-Clients, die HTTP verwenden, können folgende Befehle absetzen, um Ressourcen anzufordern oder zu verändern:
</p>
<table class="wikitable sortable">

<tbody><tr>
<th>Befehl<br> (HTTP-Methode)</th>
<th>Beschreibung</th>
<th>Anmerkungen
</th></tr>
<tr>
<td>GET
</td>
<td>Fordert die angegebene Ressource vom Server an. GET weist keine Nebeneffekte auf. Der Zustand am Server wird nicht verändert, weshalb GET als <i>sicher</i> bezeichnet wird.
</td>
<td><sup id="cite_ref-nullipotent_5-0" class="reference"><a href="#cite_note-nullipotent-5"><span class="cite-bracket">[</span>n 1<span class="cite-bracket">]</span></a></sup>
</td></tr>
<tr>
<td>POST
</td>
<td>Fügt eine neue (Sub-)Ressource unterhalb der angegebenen Ressource ein. Da die neue Ressource noch keinen URI besitzt, adressiert der URI die übergeordnete Ressource. Als Ergebnis wird der neue Ressourcenlink dem Client zurückgegeben. POST kann im weiteren Sinne auch dazu verwendet werden, Operationen abzubilden, die von keiner anderen Methode abgedeckt werden.
</td>
<td><sup id="cite_ref-nicht-idempotent_6-0" class="reference"><a href="#cite_note-nicht-idempotent-6"><span class="cite-bracket">[</span>n 2<span class="cite-bracket">]</span></a></sup>
</td></tr>
<tr>
<td>PUT
</td>
<td>Die angegebene Ressource wird angelegt. Wenn die Ressource bereits existiert, wird sie geändert.
</td>
<td><sup id="cite_ref-idempotent_7-0" class="reference"><a href="#cite_note-idempotent-7"><span class="cite-bracket">[</span>n 3<span class="cite-bracket">]</span></a></sup>
</td></tr>
<tr>
<td>PATCH<sup id="cite_ref-patch_8-0" class="reference"><a href="#cite_note-patch-8"><span class="cite-bracket">[</span>n 4<span class="cite-bracket">]</span></a></sup>
</td>
<td>Ein Teil der angegebenen Ressource wird geändert. Hierbei sind Nebeneffekte erlaubt.
</td>
<td><sup id="cite_ref-optional_9-0" class="reference"><a href="#cite_note-optional-9"><span class="cite-bracket">[</span>n 5<span class="cite-bracket">]</span></a></sup>
</td></tr>
<tr>
<td>DELETE
</td>
<td>Löscht die angegebene Ressource.
</td>
<td><sup id="cite_ref-idempotent_7-1" class="reference"><a href="#cite_note-idempotent-7"><span class="cite-bracket">[</span>n 3<span class="cite-bracket">]</span></a></sup>
</td></tr>
<tr>
<td>HEAD
</td>
<td>Fordert Metadaten zu einer Ressource an.
</td>
<td><sup id="cite_ref-optional_9-1" class="reference"><a href="#cite_note-optional-9"><span class="cite-bracket">[</span>n 5<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-nullipotent_5-1" class="reference"><a href="#cite_note-nullipotent-5"><span class="cite-bracket">[</span>n 1<span class="cite-bracket">]</span></a></sup>
</td></tr>
<tr>
<td>OPTIONS
</td>
<td>Prüft, welche Methoden auf einer Ressource zur Verfügung stehen.
</td>
<td><sup id="cite_ref-optional_9-2" class="reference"><a href="#cite_note-optional-9"><span class="cite-bracket">[</span>n 5<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-nullipotent_5-2" class="reference"><a href="#cite_note-nullipotent-5"><span class="cite-bracket">[</span>n 1<span class="cite-bracket">]</span></a></sup>
</td></tr>
<tr>
<td>CONNECT
</td>
<td>Dient dazu, die Anfrage durch einen TCP-Tunnel zu leiten. Wird meist eingesetzt, um eine HTTPS-Verbindung über einen HTTP-Proxy herzustellen.
</td>
<td><sup id="cite_ref-optional_9-3" class="reference"><a href="#cite_note-optional-9"><span class="cite-bracket">[</span>n 5<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-nullipotent_5-3" class="reference"><a href="#cite_note-nullipotent-5"><span class="cite-bracket">[</span>n 1<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-sicherheit_10-0" class="reference"><a href="#cite_note-sicherheit-10"><span class="cite-bracket">[</span>n 6<span class="cite-bracket">]</span></a></sup>
</td></tr>
<tr>
<td>TRACE
</td>
<td>Gibt die Anfrage zurück, wie sie der Zielserver erhält. Dient etwa dazu, um Änderungen der Anfrage durch Proxyserver zu ermitteln.
</td>
<td><sup id="cite_ref-optional_9-4" class="reference"><a href="#cite_note-optional-9"><span class="cite-bracket">[</span>n 5<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-nullipotent_5-4" class="reference"><a href="#cite_note-nullipotent-5"><span class="cite-bracket">[</span>n 1<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-sicherheit_10-1" class="reference"><a href="#cite_note-sicherheit-10"><span class="cite-bracket">[</span>n 6<span class="cite-bracket">]</span></a></sup>
</td></tr>
<tr class="sortbottom">
<td colspan="3">
<ol class="references" data-mw-group="n">
<li id="cite_note-nullipotent-5"><span class="mw-cite-backlink">↑ <sup><a href="#cite_ref-nullipotent_5-0">a</a></sup> <sup><a href="#cite_ref-nullipotent_5-1">b</a></sup> <sup><a href="#cite_ref-nullipotent_5-2">c</a></sup> <sup><a href="#cite_ref-nullipotent_5-3">d</a></sup> <sup><a href="#cite_ref-nullipotent_5-4">e</a></sup></span> <span class="reference-text">
nullipotent. Ein Aufruf dieser Methoden führt zu keinen Nebeneffekten.</span>
</li>
<li id="cite_note-nicht-idempotent-6"><span class="mw-cite-backlink"><a href="#cite_ref-nicht-idempotent_6-0">↑</a></span> <span class="reference-text">
nicht idempotent. Ein erneuter Aufruf erstellt für jeden Aufruf mit demselben URI ein neues Objekt, anstatt dasselbe Objekt zurückzugeben.</span>
</li>
<li id="cite_note-idempotent-7"><span class="mw-cite-backlink">↑ <sup><a href="#cite_ref-idempotent_7-0">a</a></sup> <sup><a href="#cite_ref-idempotent_7-1">b</a></sup></span> <span class="reference-text">
<a href="Idempotenz" title="Idempotenz">idempotent</a>. Der erste Aufruf dieser Methoden mit einem bestimmten URI führt zu Nebeneffekten. Ein erneuter Aufruf mit demselben URI führt zu keinen weiteren Nebeneffekten.</span>
</li>
<li id="cite_note-patch-8"><span class="mw-cite-backlink"><a href="#cite_ref-patch_8-0">↑</a></span> <span class="reference-text">
<i><a href="Request_for_Comments" title="Request for Comments">RFC</a>: <style data-mw-deduplicate="TemplateStyles:r250917974">
/* start https://de.wikipedia.org/ */


.mw-parser-output .dewiki-iconexternal>a{background-position:center right!important;background-repeat:no-repeat!important}body.skin-minerva .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/OOjs_UI_icon_external-link-ltr-progressive.svg")!important;background-size:10px!important;padding-right:13px!important}body.skin-timeless .mw-parser-output .dewiki-iconexternal>a,body.skin-monobook .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/MediaWiki_external_link_icon.svg")!important;padding-right:13px!important}body.skin-vector .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/Link.ernal-small-ltr-progressive.svg")!important;background-size:0.857em!important;padding-right:1em!important}


/* end https://de.wikipedia.org/ */
</style><span class="dewiki-iconexternal"><a href="https://datatracker.ietf.org/doc/html/rfc5789" class="extiw external" title="rfc:5789">5789</a></span></i>&nbsp;– <i><span lang="en">PATCH Method for HTTP</span></i>. März 2010 (englisch).</span>
</li>
<li id="cite_note-optional-9"><span class="mw-cite-backlink">↑ <sup><a href="#cite_ref-optional_9-0">a</a></sup> <sup><a href="#cite_ref-optional_9-1">b</a></sup> <sup><a href="#cite_ref-optional_9-2">c</a></sup> <sup><a href="#cite_ref-optional_9-3">d</a></sup> <sup><a href="#cite_ref-optional_9-4">e</a></sup></span> <span class="reference-text">
optional. Wird nicht für <a href="CRUD" title="CRUD">CRUD</a>-Operationen benötigt.</span>
</li>
<li id="cite_note-sicherheit-10"><span class="mw-cite-backlink">↑ <sup><a href="#cite_ref-sicherheit_10-0">a</a></sup> <sup><a href="#cite_ref-sicherheit_10-1">b</a></sup></span> <span class="reference-text">
Eine Implementierung dieser Methoden wirkt sich ggf. auf die Sicherheit der Anwendung aus.</span>
</li>
</ol>
</td></tr></tbody></table>
<p>Abhängig von der Implementierung können noch weitere HTTP-Befehle unterstützt werden. Dazu gehören <code>COPY</code>, <code>MOVE</code>, <code>MKCOL</code>, <code>LOCK</code> und <code>UNLOCK</code> des <a href="WebDAV" title="WebDAV">WebDAV</a>-Protokolls<sup id="cite_ref-WebDAVMethods_11-0" class="reference"><a href="#cite_note-WebDAVMethods-11"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>, sowie <code>LINK</code> und <code>UNLINK</code> aus RFC&nbsp;2068.<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> Bei der Kommunikation über UDP kann zudem das <a href="Constrained_Application_Protocol" title="Constrained Application Protocol">CoAP</a> aus RFC&nbsp;7252<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> statt HTTP eingesetzt werden, welches leicht abweichende Bedeutungen für <code>GET</code>, <code>POST</code>, <code>PUT</code> und <code>DELETE</code> besitzt.
</p>
<div class="mw-heading mw-heading2"><h2 id="Sicherheit">Sicherheit</h2></div>
<p>Das Paradigma verlangt, dass <i>alle</i> Informationen, die eine Anwendung braucht, um den Seitenzustand wiederherzustellen, in der Anfrage enthalten sind. Dabei identifiziert der URI die Ressource, während im HTTP-Header Informationen wie Zugriffsart (GET, PUT), Rückgabeformat oder Authentifizierung enthalten sein können.
</p><p>REST lässt sich für Webseiten und Webservices verwenden, die keine Authentifizierung erfordern oder diese auf anderem Wege (beispielsweise durch Prüfung der <a href="IP-Adresse" title="IP-Adresse">IP-Adresse</a>, durch <a href="HTTP-Authentifizierung" title="HTTP-Authentifizierung">HTTP-Authentifizierung</a> oder <a href="Transport_Layer_Security" title="Transport Layer Security">TLS</a>/<a href="Hypertext_Transfer_Protocol_Secure" title="Hypertext Transfer Protocol Secure">HTTPS</a>-Zertifikatsprüfung) erreichen, wodurch bereits viele Anwendungsfälle abgedeckt werden können. Alternativ können auch <a href="Token_(Rechnernetz)" title="Token (Rechnernetz)">Token</a>-basierte Verfahren wie <a href="Keyed-Hash_Message_Authentication_Code" class="mw-redirect" title="Keyed-Hash Message Authentication Code">HMAC</a>, <a href="OAuth" title="OAuth">OAuth</a>, <a href="JSON_Web_Token" title="JSON Web Token">JSON Web Token</a> oder <a href="OpenID" title="OpenID">OpenID</a> verwendet werden.
</p><p>Da REST –&nbsp;im Gegensatz zu SOAP mit <a href="WS-Security" title="WS-Security">WS-Security</a>&nbsp;– selbst keine Verschlüsselungsmethoden definiert, wird bei sicherheitskritischen Nachrichten ein verschlüsseltes Transportprotokoll wie <a href="Hypertext_Transfer_Protocol_Secure" title="Hypertext Transfer Protocol Secure">HTTPS</a> verwendet.
</p><p>Durch die Nutzung der HTTP-Methoden ist es für Firewalls möglich, die Anfrage zu verstehen, zu filtern und zu protokollieren. Ein Beispiel dafür wäre, dass alle PUT-Anfragen von einer externen Ressource abgelehnt werden können. Dadurch unterscheidet sich REST von beispielsweise <a href="SOAP" title="SOAP">SOAP</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Versionierung">Versionierung</h2></div>
<p>Um einen REST-Service zu versionieren, stehen mehrere Varianten zur Auswahl: über die DNS-Adresse, URL und mittels HTTP-Header.
</p><p>Bei der <b>DNS-Versionierung</b> wird die Version als Bestandteil des Hostnamens behandelt.
</p><p><code>http://v1.api.example.com/customer/1234</code><br>
<code>http://v1_1.api.example.com/customer/1234</code><br>
<code>http://v2.api.example.com/customer/1234</code><br>
<code>http://v2_2.api.example.com/customer/1234</code>
</p><p>Diese Variante ist, wegen der Verwaltung im DNS, üblicherweise mit hohem Aufwand verbunden. In der Praxis ist sie daher kaum anzutreffen.
</p><p>Bei der <b>URL-Versionierung</b> wird die Version der Schnittstelle im Pfad der URL angegeben:
</p><p><code>http://example.com/api/v1/customer/1234</code><br>
<code>http://example.com/api/v1.1/customer/1234</code><br>
<code>http://example.com/api/v2.0/customer/1234</code><br>
<code>http://example.com/api/v2.2/customer/1234</code>
</p><p>Die Versionierung über die URL ist die gebräuchlichste Variante.
</p><p>Bei der Versionierung über den <b>HTTP-Header</b> wird die Version im Accept-HTTP-Header angegeben:
</p>
<div class="mw-highlight mw-highlight-lang-text mw-content-ltr" dir="ltr"><pre><span></span>GET /api/customer/1234 HTTP/1.1
Host: example.com
<span class="hll">Accept: application/xml,application/json;version=1
</span></pre></div>
<p>Nach der Bereitstellung einer neuen Version des Services muss die alte Version des Endpunktes für eine bestimmte Zeit weiter bereitgestellt werden, um dem Nutzer Zeit zur Umstellung zu geben. Eine Clientanwendung sollte automatisch erkennen können, dass der Endpunkt obsolet ist, ohne den Endpunkt in der Nutzung einzuschränken. Dies kann mittels eines Warning-HTTP-Headers<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> erfolgen:
</p>
<div class="mw-highlight mw-highlight-lang-text mw-content-ltr" dir="ltr"><pre><span></span>HTTP/1.1 200 OK
Date: Sat, 11 Mar 2017 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
<span class="hll">Warning: 299 example.com/api/v1 "Deprecated API&nbsp;: use example.com/api/v1.1 instead. Old API maintained until 2017-06-02"
</span>Content-Length: 88
Content-Type: application/json
Connection: Closed
</pre></div>
<p>Der Client sollte die Warnung im <a href="Logdatei" title="Logdatei">Log</a> und in einer <a href="Operations-Datenbank" title="Operations-Datenbank">OpsDB</a> protokollieren, um es dem Betreiber des Clienten zu ermöglichen, rechtzeitig auf die neue API umzustellen.
</p><p>Wird der alte Endpunkt weiter angeboten, sollte der neue Endpunkt mittels eines HTTP-Redirects unter der alten Adresse auffindbar sein:
</p>
<div class="mw-highlight mw-highlight-lang-text mw-content-ltr" dir="ltr"><pre><span></span><span class="hll">GET /api/v1/customer/1234 HTTP/1.1
</span>Host: example.com
Accept: application/xml,application/json
</pre></div>
<div class="mw-highlight mw-highlight-lang-text mw-content-ltr" dir="ltr"><pre><span></span>HTTP/1.1 302 Found
<span class="hll">Location: example.com/api/v1.1/customer/1234
</span></pre></div>
<p>Grundsätzlich ist es empfehlenswert, vor dem Auflassen eines obsoleten Endpunktes mittels <a href="Monitoring" title="Monitoring">Monitoring</a> zu prüfen, ob dieser Endpunkt noch aktiv verwendet wird. Zudem sollte mittels <a href="Operations-Datenbank" title="Operations-Datenbank">OpsDB</a> geprüft werden, ob es sich um einen Endpunkt handelt, der nur selten (z.&nbsp;B. quartalsweise) verwendet wird.
</p>
<div class="mw-heading mw-heading2"><h2 id="HATEOAS">HATEOAS</h2></div>
<div class="hauptartikel" role="navigation"><span class="hauptartikel-pfeil" title="siehe" aria-hidden="true" role="presentation">→&nbsp;</span><i><span class="hauptartikel-text">Hauptartikel</span>: <a href="HATEOAS" title="HATEOAS">HATEOAS</a></i></div>
<p>HATEOAS steht für <i>Hypermedia as the Engine of Application State</i> und ist ein Entwurfsprinzip von REST-Architekturen. Bei HATEOAS navigiert der Client einer REST-Schnittstelle ausschließlich über URLs, die vom Server bereitgestellt werden.<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup>
</p><p>Abhängig von der gewählten Repräsentation geschieht die Bereitstellung der URIs über <a href="Hypermedia" title="Hypermedia">Hypermedia</a>, also z.&nbsp;B.
</p>
<ul><li>in Form von „href“- und „src“-Attributen bei <a href="Hypertext_Markup_Language" title="Hypertext Markup Language">HTML</a>-Dokumenten bzw. HTML-Snippets, oder</li>
<li>in für die jeweilige Schnittstelle definierten und dokumentierten JSON- bzw. XML-Attributen/-Elementen.</li></ul>
<p>Abstrakt betrachtet stellen HATEOAS-konforme REST-Services einen <a href="Endlicher_Automat" title="Endlicher Automat">endlichen Automaten</a> dar, dessen Zustandsveränderungen durch die Navigation mittels der bereitgestellten URIs erfolgt.
</p><p>Durch HATEOAS ist eine lose Bindung gewährleistet und die Schnittstelle kann verändert werden. Im Gegensatz dazu kommuniziert ein SOAP-basierter Webservice über ein fixiertes Interface. Für eine Änderung des Service muss hier eine neue Schnittstelle bereitgestellt werden und in der <a href="Schnittstellenbeschreibungssprache" title="Schnittstellenbeschreibungssprache">Schnittstellenbeschreibung</a> (ein <a href="Web_Services_Description_Language" title="Web Services Description Language">WSDL</a>-Dokument) definiert werden. Registrierungsdatenbanken oder ähnliche Infrastrukturen, die z.&nbsp;B. bei <a href="Remote_Function_Call" title="Remote Function Call">Remote Function Call</a> erforderlich sind, werden bei HATEOAS nicht benötigt.
</p><p>Zur Abbildung von HATEOAS gibt es unterschiedliche Standards. Hierzu gehören:<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li><a rel="nofollow" class="external text" href="http://jsonapi.org/">JSON API</a></li>
<li><a href="JSON-LD" title="JSON-LD">JSON-LD</a> und <a rel="nofollow" class="external text" href="http://www.markus-lanthaler.com/hydra/">Hydra</a></li>
<li><a rel="nofollow" class="external text" href="http://amundsen.com/media-types/collection/">Collection+JSON</a></li>
<li><a rel="nofollow" class="external text" href="https://github.com/kevinswiber/siren">Siren</a></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Beispiel">Beispiel</h3></div>
<p>Im Beispiel sieht man einen GET-Request, der Konto-Informationen im JSON-Format abruft:
</p>
<div class="mw-highlight mw-highlight-lang-http mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">GET</span> <span class="nn">/accounts/123abc</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
<span class="na">Host</span><span class="o">:</span> <span class="l">bank.example.com</span>
<span class="na">Accept</span><span class="o">:</span> <span class="l">application/json</span>
<span class="err">...</span>
</pre></div>
<p>Die Antwort bei einem ausgeglichenen Konto kann dann wie folgt lauten:
</p>
<div class="mw-highlight mw-highlight-lang-http mw-content-ltr" dir="ltr"><pre><span></span><span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span> <span class="m">200</span> <span class="ne">OK</span>
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
<span class="na">Content-Length</span><span class="o">:</span> <span class="l">...</span>

<span class="p">{</span>
<span class="w"> </span><span class="nt">"account"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nt">"account_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"123abc"</span><span class="p">,</span>
<span class="w"> </span><span class="nt">"balance"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nt">"currency"</span><span class="p">:</span><span class="w"> </span><span class="s2">"EUR"</span><span class="p">,</span>
<span class="w"> </span><span class="nt">"value"</span><span class="p">:</span><span class="w"> </span><span class="mf">100.0</span>
<span class="w"> </span><span class="p">},</span>
<span class="w"> </span><span class="nt">"links"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nt">"deposit"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/accounts/123abc/deposit"</span><span class="p">,</span>
<span class="w"> </span><span class="nt">"withdraw"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/accounts/123abc/withdraw"</span><span class="p">,</span>
<span class="w"> </span><span class="nt">"transfer"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/accounts/123abc/transfer"</span><span class="p">,</span>
<span class="w"> </span><span class="nt">"close"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/accounts/123abc/close"</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>Beispielantwort 1
</p><p>Die <i>Beispielantwort 1</i> beinhaltet vier mögliche Links: <code>deposit</code> (einzahlen), <code>withdraw</code> (abbuchen), <code>transfer</code> (überweisen) und <code>close</code> (kündigen). Wenn das Konto überzogen ist, kann nur noch Geld auf das Konto eingezahlt werden, aber keines mehr abgebucht oder überwiesen werden, und man kann das Konto nicht mehr kündigen. Die Antwort bei einem überzogenen Konto kann daher so aussehen:
</p>
<div class="mw-highlight mw-highlight-lang-http mw-content-ltr" dir="ltr"><pre><span></span><span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span> <span class="m">200</span> <span class="ne">OK</span>
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
<span class="na">Content-Length</span><span class="o">:</span> <span class="l">...</span>

<span class="p">{</span>
<span class="w"> </span><span class="nt">"account"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nt">"account_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"123abc"</span><span class="p">,</span>
<span class="w"> </span><span class="nt">"balance"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nt">"currency"</span><span class="p">:</span><span class="w"> </span><span class="s2">"EUR"</span><span class="p">,</span>
<span class="w"> </span><span class="nt">"value"</span><span class="p">:</span><span class="w"> </span><span class="mf">-100.0</span>
<span class="w"> </span><span class="p">},</span>
<span class="w"> </span><span class="nt">"links"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nt">"deposit"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/accounts/123abc/deposit"</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>Beispielantwort 2
</p>
<div class="mw-heading mw-heading2"><h2 id="Richardson_Maturity_Model">Richardson Maturity Model</h2></div>
<p>Das Richardson Maturity Model (RMM, deutsch <i>Richardson-Reifegradmodell</i>) ist ein von Leonard Richardson entwickelter Maßstab, der angibt, wie strikt ein Service REST implementiert.
</p>
<table class="wikitable">
<caption>Richardson Maturity Model<sup id="cite_ref-RMM_17-0" class="reference"><a href="#cite_note-RMM-17"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup>
</caption>
<tbody><tr>
<th>Level</th>
<th>Eigenschaften
</th></tr>
<tr>
<td style="text-align:center">0</td>
<td>
<ul><li>verwendet <a href="XML-RPC" title="XML-RPC">XML-RPC</a> oder <a href="SOAP" title="SOAP">SOAP</a></li>
<li>der Service wird über einen einzelnen URI adressiert</li>
<li>verwendet eine einzelne HTTP-Methode (oft POST)</li></ul>
</td></tr>
<tr>
<td style="text-align:center">1</td>
<td>
<ul><li>verwendet verschiedene URIs und Ressourcen</li>
<li>verwendet eine einzelne HTTP-Methode (oft POST)</li></ul>
</td></tr>
<tr>
<td style="text-align:center">2</td>
<td>
<ul><li>verwendet verschiedene URIs und Ressourcen</li>
<li>verwendet mehrere HTTP-Methoden</li></ul>
</td></tr>
<tr>
<td style="text-align:center">3</td>
<td>
<ul><li>basiert auf HATEOAS und verwendet daher <a href="Hypermedia" title="Hypermedia">Hypermedia</a> für Navigation</li>
<li>verwendet verschiedene URIs und Ressourcen</li>
<li>verwendet mehrere HTTP-Methoden</li></ul>
</td></tr></tbody></table>
<div class="mw-heading mw-heading2"><h2 id="Abgrenzung_zu_anderen_Kommunikationsmechanismen">Abgrenzung zu anderen Kommunikationsmechanismen</h2></div>
<p>Bei REST handelt es sich um ein Programmierparadigma, welches mit verschiedenen Mechanismen implementiert werden kann. Eine Neuerung ist dabei die Verwendung möglichst vieler <a href="Hypertext_Transfer_Protocol" title="Hypertext Transfer Protocol">HTTP</a>-Methoden in Verbindung mit der auszuführenden Aktion. Im Gegensatz dazu wird zum Beispiel SOAP im Wesentlichen mit der POST-Methode verwendet. Der Unterschied liegt also mehr in der breiteren Verwendung von HTTP als Protokoll und URI als Identifizierungsmechanismus für konkrete Objekte. In der Vergangenheit wurden im Gegensatz dazu SOAP-Schnittstellen <a href="Remote_Procedure_Call" title="Remote Procedure Call">RPC</a>-basiert aufgebaut. Zu den Schwächen von SOAP gehören dabei der recht große Overhead mit vielen Meta- und wenig Nutzdaten sowie das rechenintensive Bauen der XML-Nachrichten. Darüber hinaus gibt es mittlerweile zahlreiche schwer zu überblickende Substandards.<sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup>
Die engen Vorgaben von REST helfen dagegen, gut strukturierte Dienste zu bauen, und unterstützen die Verwendung von <a href="Clean_URL" title="Clean URL">Clean URLs</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Siehe_auch">Siehe auch</h2></div>
<ul><li><a href="Java_API_for_RESTful_Web_Services" class="mw-redirect" title="Java API for RESTful Web Services">Java API for RESTful Web Services</a> (JAX-RS)</li>
<li><a href="Web_Application_Description_Language" title="Web Application Description Language">Web Application Description Language</a> – Beschreibungssprache für REST-basierte Dienste</li>
<li><a href="JSON-RPC" title="JSON-RPC">JSON-RPC</a> – JSON basiertes RPC-Protokoll</li>
<li><a href="Open_Data_Protocol" title="Open Data Protocol">Open Data Protocol</a> (OData)</li>
<li><a href="OpenAPI" title="OpenAPI">OpenAPI</a> – Spezifikation zur Beschreibung von REST-Schnittstellen</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Literatur">Literatur</h2></div>
<ul><li>Leonard Richardson, Sam Ruby: <cite style="font-style:italic">Web Services mit REST</cite>. O’Reilly Verlag, 2007, ISBN 978-3-89721-727-0.<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Representational+State+Transfer&amp;rft.au=Leonard+Richardson%2C+Sam+Ruby&amp;rft.btitle=Web+Services+mit+REST&amp;rft.date=2007&amp;rft.genre=book&amp;rft.isbn=9783897217270&amp;rft.pub=O%E2%80%99Reilly+Verlag" style="display:none">&nbsp;</span></li>
<li>Stefan Tilkov et al.: <cite style="font-style:italic">REST und HTTP</cite>. Entwicklung und Integration nach dem Architekturstil des Web. 3., aktualisierte und erweiterte Auflage. dpunkt Verlag, 2015, ISBN 978-3-86490-120-1.<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Representational+State+Transfer&amp;rft.au=Stefan+Tilkov+et+al.&amp;rft.btitle=REST+und+HTTP&amp;rft.date=2015&amp;rft.edition=3.%2C+aktualisierte+und+erweiterte+Auflage&amp;rft.genre=book&amp;rft.isbn=9783864901201&amp;rft.pub=dpunkt+Verlag" style="display:none">&nbsp;</span></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><span class="cite">Roy Thomas Fielding: <a rel="nofollow" class="external text" href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm"><i>Architectural Styles and the Design of Network-based Software Architectures.</i></a><span class="Abrufdatum"> Abgerufen am 6.&nbsp;April 2013</span> (englisch, Dissertation, in der REST beschrieben wird).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3ARepresentational+State+Transfer&amp;rft.title=Architectural+Styles+and+the+Design+of+Network-based+Software+Architectures&amp;rft.description=Architectural+Styles+and+the+Design+of+Network-based+Software+Architectures&amp;rft.identifier=http%3A%2F%2Fwww.ics.uci.edu%2F%7Efielding%2Fpubs%2Fdissertation%2Ftop.htm&amp;rft.creator=Roy+Thomas+Fielding&amp;rft.language=en">&nbsp;</span></li>
<li><span class="cite">Roy Thomas Fielding: <a rel="nofollow" class="external text" href="http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven"><i>REST APIs must be hypertext-driven.</i></a> 20.&nbsp;September 2008,<span class="Abrufdatum"> abgerufen am 7.&nbsp;April 2013</span> (englisch, Empfehlungen zum Entwerfen von REST-Schnittstellen mit HATEOAS).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3ARepresentational+State+Transfer&amp;rft.title=REST+APIs+must+be+hypertext-driven&amp;rft.description=REST+APIs+must+be+hypertext-driven&amp;rft.identifier=http%3A%2F%2Froy.gbiv.com%2Funtangled%2F2008%2Frest-apis-must-be-hypertext-driven&amp;rft.creator=Roy+Thomas+Fielding&amp;rft.date=2008-09-20&amp;rft.language=en">&nbsp;</span></li>
<li><span class="cite">David Megginson: <a rel="nofollow" class="external text" href="http://quoderat.megginson.com/2007/02/15/rest-the-quick-pitch"><i>The quick pitch.</i></a> In: <i>Quoderat.</i> 15.&nbsp;Februar 2007,<span class="Abrufdatum"> abgerufen am 6.&nbsp;April 2013</span> (englisch, Pragmatische Empfehlungen für die Anwendung von REST).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3ARepresentational+State+Transfer&amp;rft.title=The+quick+pitch&amp;rft.description=The+quick+pitch&amp;rft.identifier=http%3A%2F%2Fquoderat.megginson.com%2F2007%2F02%2F15%2Frest-the-quick-pitch&amp;rft.creator=David+Megginson&amp;rft.date=2007-02-15&amp;rft.language=en">&nbsp;</span></li>
<li><span class="cite">Thomas Bayer: <a rel="nofollow" class="external text" href="http://www.oio.de/public/xml/rest-webservices.htm"><i>REST Web Services.</i></a> Orientation in Objects, November 2002,<span class="Abrufdatum"> abgerufen am 6.&nbsp;April 2013</span> (Einführung in RESTful Web Services).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3ARepresentational+State+Transfer&amp;rft.title=REST+Web+Services&amp;rft.description=REST+Web+Services&amp;rft.identifier=http%3A%2F%2Fwww.oio.de%2Fpublic%2Fxml%2Frest-webservices.htm&amp;rft.creator=Thomas+Bayer&amp;rft.publisher=Orientation+in+Objects&amp;rft.date=2002-11&amp;rft.language=de">&nbsp;</span></li>
<li><span class="cite">Alex Rodriguez: <a rel="nofollow" class="external text" href="http://www.ibm.com/developerworks/webservices/library/ws-restful/"><i>RESTful Web services: The basics.</i></a> In: <i>developerWorks.</i> <a href="IBM" title="IBM">IBM</a>, 6.&nbsp;November 2008,<span class="Abrufdatum"> abgerufen am 6.&nbsp;April 2013</span> (englisch, Basisprinzipien von REST).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3ARepresentational+State+Transfer&amp;rft.title=RESTful+Web+services%3A+The+basics&amp;rft.description=RESTful+Web+services%3A+The+basics&amp;rft.identifier=http%3A%2F%2Fwww.ibm.com%2Fdeveloperworks%2Fwebservices%2Flibrary%2Fws-restful%2F&amp;rft.creator=Alex+Rodriguez&amp;rft.publisher=%5B%5BIBM%5D%5D&amp;rft.date=2008-11-06&amp;rft.language=en">&nbsp;</span></li>
<li><span class="cite">Stefan Tilkov: <a rel="nofollow" class="external text" href="http://jaxenter.de/artikel/REST-bessere-Web-Service-167838"><i>REST – Der bessere Web Service?</i></a> In: <i>jaxenter.</i> IT-Republik, Februar 2009,<span class="Abrufdatum"> abgerufen am 6.&nbsp;April 2013</span> (Grundlagen der REST-Architektur).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3ARepresentational+State+Transfer&amp;rft.title=REST+%E2%80%93+Der+bessere+Web+Service%3F&amp;rft.description=REST+%E2%80%93+Der+bessere+Web+Service%3F&amp;rft.identifier=http%3A%2F%2Fjaxenter.de%2Fartikel%2FREST-bessere-Web-Service-167838&amp;rft.creator=Stefan+Tilkov&amp;rft.publisher=IT-Republik&amp;rft.date=2009-02&amp;rft.language=de">&nbsp;</span></li>
<li><span class="cite">Gregor Roth: <a rel="nofollow" class="external text" href="http://www.infoq.com/articles/designing-restful-http-apps-roth"><i>RESTful HTTP in practice.</i></a> InfoQ, 18.&nbsp;August 2009,<span class="Abrufdatum"> abgerufen am 6.&nbsp;April 2013</span> (englisch, REST in der Praxis).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3ARepresentational+State+Transfer&amp;rft.title=RESTful+HTTP+in+practice&amp;rft.description=RESTful+HTTP+in+practice&amp;rft.identifier=http%3A%2F%2Fwww.infoq.com%2Farticles%2Fdesigning-restful-http-apps-roth&amp;rft.creator=Gregor+Roth&amp;rft.publisher=InfoQ&amp;rft.date=2009-08-18&amp;rft.language=en">&nbsp;</span></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-fielding_experiences-1"><span class="mw-cite-backlink"><a href="#cite_ref-fielding_experiences_1-0">↑</a></span> <span class="reference-text"><span class="cite">Roy Fielding: <a rel="nofollow" class="external text" href="https://www.ics.uci.edu/~fielding/pubs/dissertation/evaluation.htm"><i>6: Experience and Evaluation.</i></a> In: <i>Architectural Styles and the Design of Network-based Software Architectures.</i> 2000,<span class="Abrufdatum"> abgerufen am 15.&nbsp;Juni 2015</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3ARepresentational+State+Transfer&amp;rft.title=6%3A+Experience+and+Evaluation&amp;rft.description=6%3A+Experience+and+Evaluation&amp;rft.identifier=https%3A%2F%2Fwww.ics.uci.edu%2F%7Efielding%2Fpubs%2Fdissertation%2Fevaluation.htm&amp;rft.creator=Roy+Fielding&amp;rft.date=2000&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text">Roy Thomas Fielding: <cite style="font-style:italic">Architectural Styles and the Design of Network-based Software Architectures – Dissertation</cite>. 2000 (<a rel="nofollow" class="external text" href="https://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation_2up.pdf">Volltext</a> [PDF; <span style="white-space:nowrap">900<span style="display:inline-block;width:.2em">&nbsp;</span>kB</span>; abgerufen am 6.&nbsp;Januar 2021]).<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Representational+State+Transfer&amp;rft.au=Roy+Thomas+Fielding&amp;rft.btitle=Architectural+Styles+and+the+Design+of+Network-based+Software+Architectures+-+Dissertation&amp;rft.date=2000&amp;rft.genre=book" style="display:none">&nbsp;</span></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text">Roy Thomas Fielding: <cite style="font-style:italic">Architectural Styles and the Design of Network-based Software Architectures – Dissertation</cite>. 2000, <span style="white-space:nowrap">S.<span style="display:inline-block;width:.2em">&nbsp;</span>79<span style="display:inline-block;width:.2em">&nbsp;</span>ff</span>.<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rfr_id=info:sid/de.wikipedia.org:Representational+State+Transfer&amp;rft.au=Roy+Thomas+Fielding&amp;rft.btitle=Architectural+Styles+and+the+Design+of+Network-based+Software+Architectures+-+Dissertation&amp;rft.date=2000&amp;rft.genre=book&amp;rft.pages=79ff" style="display:none">&nbsp;</span></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a></span> <span class="reference-text">Fielding et al.: <i><a href="Request_for_Comments" title="Request for Comments">RFC</a>: <span class="dewiki-iconexternal"><a href="https://datatracker.ietf.org/doc/html/rfc2616#section-9" class="extiw external" title="rfc:2616">2616</a></span></i>&nbsp;– <i><span lang="en">Hypertext Transfer Protocol – HTTP/1.1</span></i>. Juni 1999, Abschnitt&nbsp;9: <i>Method Definitions</i>. (englisch).</span>
</li>
<li id="cite_note-WebDAVMethods-11"><span class="mw-cite-backlink"><a href="#cite_ref-WebDAVMethods_11-0">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://msdn.microsoft.com/en-us/library/aa142917.aspx?f=255&amp;MSPPError=-2147217396"><i>WebDAV Methods.</i></a> In: <i><a href="Microsoft_Developer_Network" title="Microsoft Developer Network">MSDN</a>.</i> Juni 2007,<span class="Abrufdatum"> abgerufen am 13.&nbsp;Februar 2016</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3ARepresentational+State+Transfer&amp;rft.title=WebDAV+Methods&amp;rft.description=WebDAV+Methods&amp;rft.identifier=https%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Faa142917.aspx%3Ff%3D255%26MSPPError%3D-2147217396&amp;rft.date=2007-06&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><a href="#cite_ref-12">↑</a></span> <span class="reference-text">Fielding et al.: <i><a href="Request_for_Comments" title="Request for Comments">RFC</a>: <span class="dewiki-iconexternal"><a href="https://datatracker.ietf.org/doc/html/rfc2068" class="extiw external" title="rfc:2068">2068</a></span></i>&nbsp;– <i><span lang="en">Hypertext Transfer Protocol – HTTP/1.1</span></i>. Januar 1997 (englisch).</span>
</li>
<li id="cite_note-13"><span class="mw-cite-backlink"><a href="#cite_ref-13">↑</a></span> <span class="reference-text"><i><a href="Request_for_Comments" title="Request for Comments">RFC</a>: <span class="dewiki-iconexternal"><a href="https://datatracker.ietf.org/doc/html/rfc7252" class="extiw external" title="rfc:7252">7252</a></span></i>&nbsp;– <i><span lang="en">The Constrained Application Protocol (CoAP)</span></i>. Juni 2014 (englisch).</span>
</li>
<li id="cite_note-14"><span class="mw-cite-backlink"><a href="#cite_ref-14">↑</a></span> <span class="reference-text"><i><a href="Request_for_Comments" title="Request for Comments">RFC</a>: <span class="dewiki-iconexternal"><a href="https://datatracker.ietf.org/doc/html/rfc7234#section-5.5" class="extiw external" title="rfc:7234">7234</a></span></i>&nbsp;– <i><span lang="en">Hypertext Transfer Protocol (HTTP/1.1): Caching</span></i>. Juni 2014, Abschnitt&nbsp;5.5: <i>Warning</i>. (englisch).</span>
</li>
<li id="cite_note-15"><span class="mw-cite-backlink"><a href="#cite_ref-15">↑</a></span> <span class="reference-text"><span class="cite">Andreas Würl, Jörg Adler: <a rel="nofollow" class="external text" href="https://www.heise.de/developer/artikel/Hoechster-Reifegrad-fuer-REST-mit-HATEOAS-3550392.html"><i>Höchster Reifegrad für REST mit HATEOAS.</i></a> <a href="Verlag_Heinz_Heise" class="mw-redirect" title="Verlag Heinz Heise">Heise</a>, 6.&nbsp;Dezember 2016,<span class="Abrufdatum"> abgerufen am 6.&nbsp;Januar 2021</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3ARepresentational+State+Transfer&amp;rft.title=H%C3%B6chster+Reifegrad+f%C3%BCr+REST+mit+HATEOAS&amp;rft.description=H%C3%B6chster+Reifegrad+f%C3%BCr+REST+mit+HATEOAS&amp;rft.identifier=https%3A%2F%2Fwww.heise.de%2Fdeveloper%2Fartikel%2FHoechster-Reifegrad-fuer-REST-mit-HATEOAS-3550392.html&amp;rft.creator=Andreas+W%C3%BCrl%2C+J%C3%B6rg+Adler&amp;rft.publisher=%5B%5BVerlag+Heinz+Heise%7CHeise%5D%5D&amp;rft.date=2016-12-06">&nbsp;</span></span>
</li>
<li id="cite_note-16"><span class="mw-cite-backlink"><a href="#cite_ref-16">↑</a></span> <span class="reference-text"><span class="cite">Kevin Sookocheff: <a rel="nofollow" class="external text" href="https://sookocheff.com/post/api/on-choosing-a-hypermedia-format/"><i>On choosing a hypermedia type for your API – HAL, JSON-LD, Collection+JSON, SIREN, Oh My!</i></a> 11.&nbsp;März 2014,<span class="Abrufdatum"> abgerufen am 11.&nbsp;Juni 2017</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3ARepresentational+State+Transfer&amp;rft.title=On+choosing+a+hypermedia+type+for+your+API+%E2%80%93+HAL%2C+JSON-LD%2C+Collection%2BJSON%2C+SIREN%2C+Oh+My%21&amp;rft.description=On+choosing+a+hypermedia+type+for+your+API+%E2%80%93+HAL%2C+JSON-LD%2C+Collection%2BJSON%2C+SIREN%2C+Oh+My%21&amp;rft.identifier=https%3A%2F%2Fsookocheff.com%2Fpost%2Fapi%2Fon-choosing-a-hypermedia-format%2F&amp;rft.creator=Kevin+Sookocheff&amp;rft.date=2014-03-11&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-RMM-17"><span class="mw-cite-backlink"><a href="#cite_ref-RMM_17-0">↑</a></span> <span class="reference-text"><span class="cite"><a href="Martin_Fowler" title="Martin Fowler">Martin Fowler</a>: <a rel="nofollow" class="external text" href="http://martinfowler.com/articles/richardsonMaturityModel.html"><i>Richardson Maturity Model.</i></a> 18.&nbsp;März 2010,<span class="Abrufdatum"> abgerufen am 7.&nbsp;April 2013</span> (englisch, Erklärung des REST Maturity Models (RMM)).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3ARepresentational+State+Transfer&amp;rft.title=Richardson+Maturity+Model&amp;rft.description=Richardson+Maturity+Model&amp;rft.identifier=http%3A%2F%2Fmartinfowler.com%2Farticles%2FrichardsonMaturityModel.html&amp;rft.creator=%5B%5BMartin+Fowler%5D%5D&amp;rft.date=2010-03-18&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-18"><span class="mw-cite-backlink"><a href="#cite_ref-18">↑</a></span> <span class="reference-text"><span class="cite">Martin Helmich: <a rel="nofollow" class="external text" href="https://www.mittwald.de/blog/webentwicklung-design/webentwicklung/restful-webservices-1-was-ist-das-uberhaupt"><i>RESTful Webservices (1): Was ist das überhaupt?</i></a> 12.&nbsp;März 2013,<span class="Abrufdatum"> abgerufen am 16.&nbsp;November 2017</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3ARepresentational+State+Transfer&amp;rft.title=RESTful+Webservices+%281%29%3A+Was+ist+das+%C3%BCberhaupt%3F&amp;rft.description=RESTful+Webservices+%281%29%3A+Was+ist+das+%C3%BCberhaupt%3F&amp;rft.identifier=https%3A%2F%2Fwww.mittwald.de%2Fblog%2Fwebentwicklung-design%2Fwebentwicklung%2Frestful-webservices-1-was-ist-das-uberhaupt&amp;rft.creator=Martin+Helmich&amp;rft.date=2013-03-12">&nbsp;</span></span>
</li>
</ol>
<style data-mw-deduplicate="TemplateStyles:r261921266">
/* start https://de.wikipedia.org/ */


.mw-parser-output table.erw-nav-zebra>tbody>:nth-child(odd){background-color:var(--dewiki-hintergrundfarbe-basis)}.mw-parser-output .erw-nav-farbschema-blau .erw-nav-leiste{background-color:#f5f5f5}.mw-parser-output .erw-nav-farbschema-blau .erw-nav-gruppe{background-color:#e5ecf2}.mw-parser-output .erw-nav-farbschema-grau .erw-nav-leiste,.mw-parser-output .erw-nav-farbschema-grau .erw-nav-gruppe{background-color:#ececec}.mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt>.wikitable>*>tr{border-top:2px solid #fdfdfd!important;border-bottom:2px solid #fdfdfd!important}@media screen{html.skin-theme-clientpref-night .mw-parser-output .erw-nav-farbschema-blau .erw-nav-leiste,html.skin-theme-clientpref-night .mw-parser-output .erw-nav-farbschema-blau .erw-nav-gruppe,html.skin-theme-clientpref-night .mw-parser-output .erw-nav-farbschema-grau .erw-nav-leiste,html.skin-theme-clientpref-night .mw-parser-output .erw-nav-farbschema-grau .erw-nav-gruppe{background-color:#202122}html.skin-theme-clientpref-night .mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt .wikitable tr,html.skin-theme-clientpref-night .mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt .wikitable td{border-color:#101418!important}html.skin-theme-clientpref-night .mw-parser-output .erw-nav-bild span[typeof="mw:File"] img{background-color:#c8ccd1}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .erw-nav-farbschema-blau .erw-nav-leiste,html.skin-theme-clientpref-os .mw-parser-output .erw-nav-farbschema-blau .erw-nav-gruppe,html.skin-theme-clientpref-os .mw-parser-output .erw-nav-farbschema-grau .erw-nav-leiste,html.skin-theme-clientpref-os .mw-parser-output .erw-nav-farbschema-grau .erw-nav-gruppe{background-color:#202122}html.skin-theme-clientpref-os .mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt .wikitable tr,html.skin-theme-clientpref-os .mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt .wikitable td{border-color:#101418!important}html.skin-theme-clientpref-os .mw-parser-output .erw-nav-bild span[typeof="mw:File"] img{background-color:#c8ccd1}}.mw-parser-output .erweiterte-navigationsleiste .hlist .wikitable{border-top:0px!important;border-bottom:0px!important;margin-top:0!important;margin-bottom:0!important}.mw-parser-output .erweiterte-navigationsleiste .hlist .wikitable tr:first-of-type td{border-top:0px!important}.mw-parser-output .erweiterte-navigationsleiste .hlist .wikitable tr:last-of-type td{border-bottom:0px!important}


/* end https://de.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r260755238">
/* start https://de.wikipedia.org/ */


.mw-parser-output div.klappleiste{border:1px solid var(--dewiki-rahmenfarbe1);clear:both;font-size:95%;box-sizing:border-box;margin-top:1.5em;padding:2px}.mw-parser-output div.klappleiste:after{clear:both;content:"";display:block}.mw-parser-output div.klappleiste-bild{float:left;padding:2px}.mw-parser-output div.klappleiste-kopf{background:var(--dewiki-hintergrundfarbe5);color:var(--color-base,#202122);text-align:center;font-weight:bold}.mw-parser-output div.klappleiste.mw-collapsed .klappleiste-bild{display:none}.mw-parser-output div.klappleiste+div.klappleiste,.mw-parser-output div.klappleiste+link+div.klappleiste,.mw-parser-output div.klappleiste+link+link+div.klappleiste,.mw-parser-output div.klappleiste+link+style+div.klappleiste,.mw-parser-output div.klappleiste+style+div.klappleiste,.mw-parser-output div.klappleiste+style+style+div.klappleiste,.mw-parser-output div.klappleiste+style+link+div.klappleiste{margin-top:-1px}@media screen{html.skin-theme-clientpref-night .mw-parser-output .klappleiste-bild span[typeof="mw:File"]:not(.skin-invert-image) img{background-color:#c8ccd1}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .klappleiste-bild span[typeof="mw:File"]:not(.skin-invert-image) img{background-color:#c8ccd1}}


/* end https://de.wikipedia.org/ */
</style>
<div class="klappleiste mw-collapsible navileiste erweiterte-navigationsleiste navigation-not-searchable center erw-nav-farbschema-blau" role="navigation">
<div class="klappleiste-kopf">Webserver-Schnittstellen</div>
<div class="klappleiste-inhalt mw-collapsible-content" style="clear:left">
<table class="wikitable erw-nav-zebra" style="width:100%;margin:0;text-align:left;font-size:95%;margin-top:.1em;margin-bottom:.0em;">


<tbody><tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"><b><a href="Netzwerkprotokoll" title="Netzwerkprotokoll">Protokolle</a></b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p><a href="Common_Gateway_Interface" title="Common Gateway Interface">CGI</a>&nbsp;| <a href="Simple_Common_Gateway_Interface" title="Simple Common Gateway Interface">SCGI</a>&nbsp;| <a href="FastCGI" title="FastCGI">FastCGI</a>&nbsp;| <a href="Apache_JServ_Protocol" title="Apache JServ Protocol">AJP</a>
</p>
</td></tr>
<tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"><b><a href="Programmierschnittstelle" title="Programmierschnittstelle">APIs</a></b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p>C NSAPI&nbsp;| C ASAPI&nbsp;| <a href="Internet_Server_API" title="Internet Server API">C ISAPI</a>&nbsp;| <a href="Jakarta_Servlet" title="Jakarta Servlet">Jakarta Servlet</a>&nbsp;| <a href="ASP.NET" title="ASP.NET">ASP.NET</a>&nbsp;| <a href="Web_Server_Gateway_Interface" title="Web Server Gateway Interface">Python WSGI</a>&nbsp;| <a href="Rack_(Webserver-Interface)" title="Rack (Webserver-Interface)">Ruby Rack</a>&nbsp;| JavaScript JSGI&nbsp;| <a href="Perl_Web_Server_Gateway_Interface" title="Perl Web Server Gateway Interface">PSGI</a>&nbsp;| Lua WSAPI&nbsp;
</p>
</td></tr>
<tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"><b><a href="Apache_HTTP_Server" title="Apache HTTP Server">Apache</a>-Module</b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p>mod_jk&nbsp;| mod_lisp&nbsp;| mod_parrot&nbsp;| <a href="Mod_perl" title="Mod perl">mod_perl</a>&nbsp;| <a href="PHP" title="PHP">mod_php</a>&nbsp;| <a href="Mod_python" title="Mod python">mod_python</a>&nbsp;| <a href="Mod_wsgi" title="Mod wsgi">mod_wsgi</a>&nbsp;| <a href="Mod_ruby" title="Mod ruby">mod_ruby</a>&nbsp;| <a href="Phusion_Passenger" title="Phusion Passenger">Phusion Passenger</a>&nbsp;
</p>
</td></tr>
<tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 1px solid #FFF;padding: 0 1em;"><b>Web APIs</b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p><a href="Web_Services_Description_Language" title="Web Services Description Language">WSDL</a>&nbsp;| <a href="XML-RPC" title="XML-RPC">XML-RPC</a>&nbsp;| <a href="SOAP" title="SOAP">SOAP</a>&nbsp;| <a class="mw-selflink selflink">REST</a>&nbsp;
</p>
</td></tr>























































</tbody></table></div></div>
<div class="hintergrundfarbe1 rahmenfarbe1 navigation-not-searchable normdaten-typ-s" style="border-style: solid; border-width: 1px; clear: left; margin-bottom:1em; margin-top:1em; padding: 0.25em; overflow: hidden; word-break: break-word; word-wrap: break-word;" id="normdaten">
<div style="display: table-cell; vertical-align: middle; width: 100%;">
<div>
Normdaten&nbsp;(Sachbegriff): <a href="Gemeinsame_Normdatei" title="Gemeinsame Normdatei">GND</a>: <span class="-print"><a rel="nofollow" class="external text" href="https://d-nb.info/gnd/7592728-7">7592728-7</a></span> </div>
</div></div></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-12-18" href="https://de.wikipedia.org/wiki/?title=Representational_State_Transfer&amp;oldid=262534821">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>